Skip to main content

Reverse proxy va load balancing

1. Reverse Proxy (Teskari proksi)

Reverse Proxy — bu foydalanuvchi bilan server o'rtasida vositachi (oraliq) bo'lib xizmat qiladigan server. U kiruvchi so'rovlarni qabul qilib, ularni ichki serverlarga (masalan, backend API'ga va eng oddiy misol bu nginx reverse proxy) uzatadi, so'ngra javobni foydalanuvchiga qaytaradi.

1.1 Misol:

Foydalanuvchi example.com saytiga kiradi.

Nginx serveri (reverse proxy) bu so'rovni oladi.

Nginx bu so'rovni ichki localhost:3000 (masalan, Node.js) serverga uzatadi.

Node.js javobni qaytaradi → Nginx → foydalanuvchiga yuboradi.

1.2 Foydasi:

Xavfsizlik: Foydalanuvchi haqiqiy backend IP manzilini bilmaydi.

SSL/TLS offloading: HTTPS bilan ishlashni Nginx bajaradi, backend esa HTTP’da ishlaydi.

Caching: Ma'lumotlar keshlanadi va tez yetkaziladi.

Static fayllar: Frontend fayllarni xizmat qiladi (.html, .css, .js).


2 Load Balancing (Yuklama muvozanatlovchi)

Load Balancer — bu ko'p backend serverlar orasida so'rovlarni taqsimlaydi. Maqsad: yuklamani teng taqsimlash va tizimning barqaror ishlashini ta’minlash.

2.1 Misol:

Sizda 3 ta Node.js server bor:

localhost:3001

localhost:3002

localhost:3003

Nginx oldida load balancer konfiguratsiyasi yozilgan.

Har bir kiruvchi so'rovni u har xil serverga yuboradi (navbati bilan yoki eng kam band bo'lganiga).

2.2 Load balancing strategiyalari:

Round Robin – navbati bilan aylantirib yuboradi.

Least Connections – eng kam ulanishga ega serverga yuboradi.

IP Hash – foydalanuvchining IP manziliga qarab yuboradi.

3. Tasavvur qilaylik:

  • Bizda 3 ta backend server bor:

    • http://localhost:3001
    • http://localhost:3002
    • http://localhost:3003
  • Foydalanuvchi sizning domeningiz: http://myapp.uz orqali murojaat qiladi.

  • Siz istaysizki, Nginx foydalanuvchi so'rovlarini bu 3 serverga muvozanatli (load balancing) qilib uzatsin.


nginx.conf yoki sites-available/myapp.conf konfiguratsiyasi:

# 1. HTTP blok – umumiy sozlamalar
http {
upstream backend_servers {
# 2. Bu yerda backend serverlar ro'yxati – Load balancing qilinadi
server 127.0.0.1:3001;
server 127.0.0.1:3002;
server 127.0.0.1:3003;

# Round-robin usuli avtomatik ishlaydi
}

server {
listen 80; # 3. HTTP so'rovlarni 80-port orqali qabul qilamiz
server_name myapp.uz; # 4. Domen nomi (real domen ham bo'lishi mumkin)

# 5. Static fayllar joylashgan joy (masalan, React build)
location / {
root /var/www/myapp-frontend;
index index.html;
try_files $uri /index.html;
}

# 6. API so'rovlar (masalan, /api) backend serverlarga uzatiladi
location /api/ {
proxy_pass http://backend_servers; # 7. Bu yerda load balancer ishlaydi
proxy_http_version 1.1;

# 8. Quyidagilar foydalanuvchi ma’lumotlarini saqlash uchun kerak
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

# 9. Error page
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}

Qadam-baqadam tushuntirish:

QadamQatorIzoh
1http {}Barcha HTTP konfiguratsiyalar shu blokda bo'ladi
2upstream backend_serversBu nom bilan biz bir nechta serverni guruhlaymiz
3listen 80HTTP trafikni 80-portda eshitadi
4server_name myapp.uzSaytingiz domeni (localda ham test qilsa bo'ladi)
5location /Foydalanuvchi sahifaga kirsa (masalan, myapp.uz/), frontend fayllarni beradi
6location /api/API so'rovlar shu yo'nalish orqali uzatiladi
7proxy_pass http://backend_serversSo'rovlar 3001, 3002, 3003 ga navbati bilan uzatiladi
8proxy_set_headerFoydalanuvchining IP va boshqa kontekstlarini saqlab yuboradi
9error_pageAgar server xato qilsa, foydalanuvchiga foydali sahifa ko'rsatadi

Ishlatish uchun:

1. Bu faylni /etc/nginx/sites-available/myapp.conf ga yozing

sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/

3. nginx konfiguratsiyasini tekshiring:

sudo nginx -t

4. Nginx’ni qayta ishga tushiring:

sudo systemctl restart nginx

Test qilish:

  • Brauzerga http://myapp.uz/api/hello deb kirganingizda,
  • So'rov backend_serversdan biriga (3001, 3002 yoki 3003) boradi
  • Har bir server logiga qarab, qaysi biri javob berganini ko'rishingiz mumkin

4. Reverse Proxy vs Load Balancer

XususiyatReverse ProxyLoad Balancer
MaqsadSo'rovni oraliq orqali uzatishYuklamani bir nechta serverga taqsimlash
FoydaXavfsizlik, SSL, cachingPerformance, scalability
Foydalanish1 ta backend bilan ishlasa ham bo'ladiKo'p backendlar bo'lishi kerak
TexnologiyalarNginx, Apache, HAProxyNginx, HAProxy, AWS ELB, Traefik